package models; import java.util.UUID; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.Serializable; import java.util.Calendar; import java.util.Date; import java.util.Observable; public abstract class Account extends Observable implements Serializable { protected String id; protected Date dateOpened; protected double money; protected AccountType type; protected Date expireDate; protected String userReport; public Account(int money, AccountType type){ id = UUID.randomUUID().toString(); dateOpened = new Date(); this.money = money; this.type = type; Calendar c = Calendar.getInstance(); c.setTime(dateOpened); c.add(Calendar.DATE, 30); expireDate = c.getTime(); userReport = "Account with ID " + id; } public abstract void deposit(double amount); public abstract void withdraw(double amount) throws NotEnoughFundsException; public void generateReportHolder(){ Document document = new Document(); try { PdfWriter.getInstance(document, new FileOutputStream("UserReport.pdf")); document.open(); document.add(new Paragraph(userReport)); document.close(); } catch (DocumentException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } public String getId() { return id; } public Date getDateOpened() { return dateOpened; } public double getMoney() { return money; } public AccountType getType() { return type; } public Date getExpireDate() { return expireDate; } public void setExpireDate(Date expireDate) { this.expireDate = expireDate; } public String toString() { return this.id + ", " + String.format("%tD", this.dateOpened) + ", " + this.money + ", " + this.type + ", " + String.format("%tD", this.expireDate); } }